递归实现折半查找算法(C语言)

您所在的位置:网站首页 int mid函数 递归实现折半查找算法(C语言)

递归实现折半查找算法(C语言)

2024-01-24 22:56| 来源: 网络整理| 查看: 265

递归实现折半查找

折半查找顾明思议,就是一半一半的查找,不过前提必须是一个有序的序列,这里我用了整型数组。

int binsearch(int a[], int key, int low, int high)

a[] :要进行查找的数组 key:要进行查找的数值 low:最小下标 high:最大下标

参数:函数传入4个参数 返回值:找到要查找的值返回对应的下标,未找到返回-1

运行环境: Visual studio 2013 因为运行环境的不同代码可能存在一些编译不通过。 在Visual studio 2013 中需要在scanf语句后加下划线s否则会编译不过 所以代码中我写的是 scanf_s("%d", &i);

不过查找算法是通用的

核心思想: 当key值小于数组的中间位置的数值时,就在中间向左边的小数组中继续查找,若大于数组的中间位置的数值时,就在中间往右边的小数组中继续查找。不过前提,这个数组是由小到大排列的。当然,如果是从大到小排列也不难,就是相反的情况了! 仔细观察,它要在更小的数组中进行查找,一步步深入,这是不是很类似呢?每次都调用同一个函数,只不过数组的大小在缩小,所以我们可以利用递归实现。

不过递归的时候也需要注意,在调用递归函数是一定要加return(这是一个递归出口) 。

下面是一个测试代码(这里我默认数组的值时{1,2,3,4,5,6,7,8,9}): 读者可进行Ctrl + C,Ctrl + V测试,如果有错误,请通知我:

#include #include #include int binsearch(int a[], int key, int low, int high) { int i = low; int j = high; int mid = (low + high) >> 1; if (i > j) { return -1; } if (key == a[mid]) { return mid; } else if (key > a[mid]) { return binsearch(a, key, mid + 1 , j); } else { return binsearch(a, key, i, mid - 1); } return -1; } int main() { int a[] = { 1,2,3,4,5,6,7,8,9 }; int i; printf("请输入你要查找的数字(找到返回下标,否则返回-1):"); scanf_s("%d", &i); i = binsearch(a, i, 0, 8); printf("%d\n", i); system("pause"); return 0; }

运行结果:

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3